package com.rede.didiok.rank.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.rede.didiok.common.dto.rank.RankCategoryDto;
import com.rede.didiok.rank.entity.RankCategoryEntity;
import com.rede.didiok.rank.vo.Catelog2Vo;

/**
 * 榜单三级分类表
 *
 * @author Rede
 * @email didiok@foxmail.com
 * @date 2023-07-20 18:24:40
 */
public interface RankCategoryService extends IService<RankCategoryEntity> {

    /********************* 提供给 didiok-admin 的方法 region ***********************/
    /**
     * 获取榜单分类列表
     *
     * @param rankCategoryDto
     * @return
     */
    IPage<RankCategoryEntity> getPageList(RankCategoryDto rankCategoryDto);

    /**
     * 获取榜单分类列表
     *
     * @return
     */
    List<RankCategoryEntity> getList();

    /**
     * 新增榜单分类
     *
     * @param rankCategoryDto
     */
    String addRankCategory(RankCategoryDto rankCategoryDto);

    /**
     * 编辑榜单分类
     *
     * @param rankCategoryDto
     */
    String editRankCategory(RankCategoryDto rankCategoryDto);

    /**
     * 批量删除榜单分类
     *
     * @param rankCategoryDtoList
     */
    String deleteBatchRankCategory(List<RankCategoryDto> rankCategoryDtoList);

    /**
     * 置顶榜单分类
     *
     * @param rankCategoryDto
     */
    String stickRankCategory(RankCategoryDto rankCategoryDto);


    /**
     * 获取排序最高的一个榜单分类
     *
     * @return
     */
    RankCategoryEntity getTopOne();

    /**
     * 获取热门标签
     *
     * @return
     */
    List<RankCategoryEntity> getHotRankCategory(Integer hotRankCategoryCount);

    /********************* 提供给 admin 的方法 endregion*********************/




    /**
     * 三级分类
     * 商品树形查询
     * @return
     */
    List<RankCategoryEntity> listWithTree();

    /**
     * 批量删除
     * @param asList
     */
    void removeMenuByIds(List<Long> asList);

    /**
     * 找出catelogId的完整路径：即找出它的完整上级包括它本身
     * [父/子/孙]
     * @param catelogUid
     * @return
     */
    String[] findCatelogPath(String catelogUid);

    /**
     * 查出所有的1级分类
     * @return
     */
    List<RankCategoryEntity> getLevel1Categorys();

    /**
     * 查询分类数据封装成map格式
     * @return
     */
    Map<String, List<Catelog2Vo>> getCatalogJson();

    Map<String, List<Catelog2Vo>> getCatalogJson2();

    /**
     * 修改分类数据
     * @param category
     */
    void updateCascade(RankCategoryEntity category);

}

